var cases = [
    "this\n",
    "null\n",
    "\n    42\n\n",
    "(1 + 2 ) * 3",
    "(1) + (2  ) + 3",
    "4 + 5 << (6)",
    "x = []",
    "x = [ ]",
    "x = [ 42 ]",
    "x = [ 42, ]",
    "x = [ ,, 42 ]",
    "x = [ 1, 2, 3, ]",
    "x = [ 1, 2,, 3, ]",
    "日本語 = []",
    "T‿ = []",
    "T‌ = []",
    "T‍ = []",
    "ⅣⅡ = []",
    "ⅣⅡ = []",
    "x = {}",
    "x = { }",
    "x = { answer: 42 }",
    "x = { if: 42 }",
    "x = { true: 42 }",
    "x = { false: 42 }",
    "x = { null: 42 }",
    "x = { \"answer\": 42 }",
    "x = { x: 1, x: 2 }",
    "x = { get width() { return m_width } }",
    "x = { get undef() {} }",
    "x = { get if() {} }",
    "x = { get true() {} }",
    "x = { get false() {} }",
    "x = { get null() {} }",
    "x = { get \"undef\"() {} }",
    "x = { get 10() {} }",
    "x = { set width(w) { m_width = w } }",
    "x = { set if(w) { m_if = w } }",
    "x = { set true(w) { m_true = w } }",
    "x = { set false(w) { m_false = w } }",
    "x = { set null(w) { m_null = w } }",
    "x = { set \"null\"(w) { m_null = w } }",
    "x = { set 10(w) { m_null = w } }",
    "x = { get: 42 }",
    "x = { set: 43 }",
    "x = { __proto__: 2 }",
    "x = {\"__proto__\": 2 }",
    "x = { get width() { return m_width }, set width(width) { m_width = width; } }",
    "/* block comment */ 42",
    "42 /*The*/ /*Answer*/",
    "42 /*the*/ /*answer*/",
    "42 /* the * answer */",
    "42 /* The * answer */",
    "/* multiline\ncomment\nshould\nbe\nignored */ 42",
    "/*a\nb*/ 42",
    "/*a\nb*/ 42",
    "/*a\nb*/ 42",
    "/*a\nc*/ 42",
    "// line comment\n42",
    "42 // line comment",
    "// Hello, world!\n42",
    "// Hello, world!\n",
    "// Hallo, world!\n",
    "//\n42",
    "//",
    "// ",
    "/**/42",
    "// Hello, world!\n\n//   Another hello\n42",
    "if (x) { // Some comment\ndoThat(); }",
    "switch (answer) { case 42: /* perfect */ bingo() }",
    "0",
    "3",
    "5",
    "42",
    ".14",
    "3.14159",
    "6.02214179e+23",
    "1.492417830e-10",
    "0x0",
    "0x0;",
    "0e+100 ",
    "0e+100",
    "0xabc",
    "0xdef",
    "0X1A",
    "0x10",
    "0x100",
    "0X04",
    "02",
    "012",
    "0012",
    "\"Hello\"",
    "\"\\n\\r\\t\\v\\b\\f\\\\\\'\\\"\\0\"",
    "\"\\u0061\"",
    "\"\\x61\"",
    "\"\\u00\"",
    "\"\\xt\"",
    "\"Hello\\nworld\"",
    "\"Hello\\\nworld\"",
    "\"Hello\\02World\"",
    "\"Hello\\012World\"",
    "\"Hello\\122World\"",
    "\"Hello\\0122World\"",
    "\"Hello\\312World\"",
    "\"Hello\\412World\"",
    "\"Hello\\812World\"",
    "\"Hello\\712World\"",
    "\"Hello\\0World\"",
    "\"Hello\\\nworld\"",
    "\"Hello\\1World\"",
    "var x = /[a-z]/i",
    "var x = /[x-z]/i",
    "var x = /[a-c]/i",
    "var x = /[P QR]/i",
    "var x = /foo\\/bar/",
    "var x = /=([^=\\s])+/g",
    "var x = /[P QR]/\\u0067",
    "var x = /[P QR]/\\g",
    "var x = /42/g.test",
    "new Button",
    "new Button()",
    "new new foo",
    "new new foo()",
    "new foo().bar()",
    "new foo[bar]",
    "new foo.bar()",
    "( new foo).bar()",
    "foo(bar, baz)",
    "(    foo  )()",
    "universe.milkyway",
    "universe.milkyway.solarsystem",
    "universe.milkyway.solarsystem.Earth",
    "universe[galaxyName, otherUselessName]",
    "universe[galaxyName]",
    "universe[42].galaxies",
    "universe(42).galaxies",
    "universe(42).galaxies(14, 3, 77).milkyway",
    "earth.asia.Indonesia.prepareForElection(2014)",
    "universe.if",
    "universe.true",
    "universe.false",
    "universe.null",
    "x++",
    "x--",
    "eval++",
    "eval--",
    "arguments++",
    "arguments--",
    "++x",
    "--x",
    "++eval",
    "--eval",
    "++arguments",
    "--arguments",
    "+x",
    "-x",
    "~x",
    "!x",
    "void x",
    "delete x",
    "typeof x",
    "x * y",
    "x / y",
    "x % y",
    "x + y",
    "x - y",
    "\"use strict\" + 42",
    "x << y",
    "x >> y",
    "x >>> y",
    "x < y",
    "x > y",
    "x <= y",
    "x >= y",
    "x in y",
    "x instanceof y",
    "x < y < z",
    "x == y",
    "x != y",
    "x === y",
    "x !== y",
    "x & y",
    "x ^ y",
    "x | y",
    "x + y + z",
    "x - y + z",
    "x + y - z",
    "x - y - z",
    "x + y * z",
    "x + y / z",
    "x - y % z",
    "x * y * z",
    "x * y / z",
    "x * y % z",
    "x % y * z",
    "x << y << z",
    "x | y | z",
    "x & y & z",
    "x ^ y ^ z",
    "x & y | z",
    "x | y ^ z",
    "x | y & z",
    "x || y",
    "x && y",
    "x || y || z",
    "x && y && z",
    "x || y && z",
    "x || y ^ z",
    "y ? 1 : 2",
    "x && y ? 1 : 2",
    "x = 42",
    "eval = 42",
    "arguments = 42",
    "x *= 42",
    "x /= 42",
    "x %= 42",
    "x += 42",
    "x -= 42",
    "x <<= 42",
    "x >>= 42",
    "x >>>= 42",
    "x &= 42",
    "x ^= 42",
    "x |= 42",
    "a || b && c | d ^ e & f == g < h >>> i + j * k",
    "{ foo }",
    "{ doThis(); doThat(); }",
    "{}",
    "var x",
    "var x, y;",
    "var x = 42",
    "var eval = 42, arguments = 42",
    "var x = 14, y = 3, z = 1977",
    "var implements, interface, package",
    "var private, protected, public, static",
    "let x",
    "{ let x }",
    "{ let x = 42 }",
    "{ let x = 14, y = 3, z = 1977 }",
    "const x = 42",
    "{ const x = 42 }",
    "{ const x = 14, y = 3, z = 1977 }",
    ";",
    "x",
    "x, y",
    "\\u0061",
    "a\\u0061",
    "\\u0061a",
    "\\u0061a ",
    "if (morning) goodMorning()",
    "if (morning) (function(){})",
    "if (morning) var x = 0;",
    "if (morning) function a(){}",
    "if (morning) goodMorning(); else goodDay()",
    "do keep(); while (true)",
    "do keep(); while (true);",
    "do { x++; y--; } while (x < 10)",
    "{ do { } while (false) false }",
    "while (true) doSomething()",
    "while (x < 10) { x++; y--; }",
    "for(;;);",
    "for(;;){}",
    "for(x = 0;;);",
    "for(var x = 0;;);",
    "for(let x = 0;;);",
    "for(var x = 0, y = 1;;);",
    "for(x = 0; x < 42;);",
    "for(x = 0; x < 42; x++);",
    "for(x = 0; x < 42; x++) process(x);",
    "for(x in list) process(x);",
    "for (var x in list) process(x);",
    "for (var x = 42 in list) process(x);",
    "for (let x in list) process(x);",
    "for (var i = function() { return 10 in [] } in list) process(x);",
    "while (true) { continue; }",
    "while (true) { continue }",
    "done: while (true) { continue done }",
    "done: while (true) { continue done; }",
    "__proto__: while (true) { continue __proto__; }",
    "while (true) { break }",
    "done: while (true) { break done }",
    "done: while (true) { break done; }",
    "__proto__: while (true) { break __proto__; }",
    "(function(){ return })",
    "(function(){ return; })",
    "(function(){ return x; })",
    "(function(){ return x * y })",
    "with (x) foo = bar",
    "with (x) foo = bar;",
    "with (x) { foo = bar }",
    "switch (x) {}",
    "switch (answer) { case 42: hi(); break; }",
    "switch (answer) { case 42: hi(); break; default: break }",
    "start: for (;;) break start",
    "start: while (true) break start",
    "__proto__: test",
    "throw x;",
    "throw x * y",
    "throw { message: \"Error\" }",
    "try { } catch (e) { }",
    "try { } catch (eval) { }",
    "try { } catch (arguments) { }",
    "try { } catch (e) { say(e) }",
    "try { } finally { cleanup(stuff) }",
    "try { doThat(); } catch (e) { say(e) }",
    "try { doThat(); } catch (e) { say(e) } finally { cleanup(stuff) }",
    "debugger;",
    "function hello() { sayHi(); }",
    "function eval() { }",
    "function arguments() { }",
    "function test(t, t) { }",
    "(function test(t, t) { })",
    "function eval() { function inner() { \"use strict\" } }",
    "function hello(a) { sayHi(); }",
    "function hello(a, b) { sayHi(); }",
    "var hi = function() { sayHi() };",
    "var hi = function eval() { };",
    "var hi = function arguments() { };",
    "var hello = function hi() { sayHi() };",
    "(function(){})",
    "function universe(__proto__) { }",
    "function test() { \"use strict\" + 42; }",
    "{ x\n++y }",
    "{ x\n--y }",
    "var x /* comment */;",
    "{ var x = 14, y = 3\nz; }",
    "while (true) { continue\nthere; }",
    "while (true) { continue // Comment\nthere; }",
    "while (true) { continue /* Multiline\nComment */there; }",
    "while (true) { break\nthere; }",
    "while (true) { break // Comment\nthere; }",
    "while (true) { break /* Multiline\nComment */there; }",
    "(function(){ return\nx; })",
    "(function(){ return // Comment\nx; })",
    "(function(){ return/* Multiline\nComment */x; })",
    "{ throw error\nerror; }",
    "{ throw error// Comment\nerror; }",
    "{ throw error/* Multiline\nComment */error; }",
    "",
    "{",
    "}",
    "3ea",
    "3in []",
    "3e",
    "3e+",
    "3e-",
    "3x",
    "3x0",
    "0x",
    "09",
    "018",
    "01a",
    "3in[]",
    "0x3in[]",
    "\"Hello\nWorld\"",
    "x\\",
    "x\\u005c",
    "x\\u002a",
    "var x = /(s/g",
    "a\\u",
    "\\ua",
    "/",
    "/test",
    "var x = /[a-z]/\\ux",
    "3 = 4",
    "func() = 4",
    "(1 + 1) = 10",
    "1++",
    "1--",
    "++1",
    "--1",
    "for((1 + 1) in list) process(x);",
    "[",
    "[,",
    "1 + {",
    "1 + { t:t ",
    "1 + { t:t,",
    "var x = /\n/",
    "var x = \"\n",
    "var if = 42",
    "i #= 42",
    "i + 2 = 42",
    "+i = 42",
    "1 + (",
    "\n\n\n{",
    "\n/* Some multiline\ncomment */\n)",
    "{ set 1 }",
    "{ get 2 }",
    "({ set: s(if) { } })",
    "({ set s(.) { } })",
    "({ set: s() { } })",
    "({ set: s(a, b) { } })",
    "({ get: g(d) { } })",
    "({ get i() { }, i: 42 })",
    "({ i: 42, get i() { } })",
    "({ set i(x) { }, i: 42 })",
    "({ i: 42, set i(x) { } })",
    "({ get i() { }, get i() { } })",
    "({ set i(x) { }, set i(x) { } })",
    "function t(if) { }",
    "function t(true) { }",
    "function t(false) { }",
    "function t(null) { }",
    "function null() { }",
    "function true() { }",
    "function false() { }",
    "function if() { }",
    "a b;",
    "if.a;",
    "a if;",
    "a class;",
    "break\n",
    "break 1;",
    "continue\n",
    "continue 2;",
    "throw",
    "throw;",
    "throw\n",
    "for (var i, i2 in {});",
    "for ((i in {}));",
    "for (i + 1 in {});",
    "for (+i in {});",
    "if(false)",
    "if(false) doThis(); else",
    "do",
    "while(false)",
    "for(;;)",
    "with(x)",
    "try { }",
    "‿ = 10",
    "const x = 12, y;",
    "const x, y = 12;",
    "const x;",
    "if(true) let a = 1;",
    "if(true) const a = 1;",
    "switch (c) { default: default: }",
    "new X().\"s\"",
    "/*",
    "/*\n\n\n",
    "/**",
    "/*\n\n*",
    "/*hello",
    "/*hello  *",
    "\n]",
    "\n]",
    "\n]",
    "\n\n]",
    "//\n]",
    "//\n\n]",
    "/a\\\n/",
    "//\n \n]",
    "/*\n*/]",
    "/*\n\n*/]",
    "/*\n \n*/]",
    "\\\\",
    "\\u005c",
    "\\x",
    "\\u0000",
    "‌ = []",
    "‍ = []",
    "\"\\",
    "\"\\u",
    "try { } catch() {}",
    "return",
    "break",
    "continue",
    "switch (x) { default: continue; }",
    "do { x } *",
    "while (true) { break x; }",
    "while (true) { continue x; }",
    "x: while (true) { (function () { break x; }); }",
    "x: while (true) { (function () { continue x; }); }",
    "x: while (true) { (function () { break; }); }",
    "x: while (true) { (function () { continue; }); }",
    "x: while (true) { x: while (true) { } }",
    "(function () { 'use strict'; delete i; }())",
    "(function () { 'use strict'; with (i); }())",
    "function hello() {'use strict'; ({ i: 42, i: 42 }) }",
    "function hello() {'use strict'; ({ hasOwnProperty: 42, hasOwnProperty: 42 }) }",
    "function hello() {'use strict'; var eval = 10; }",
    "function hello() {'use strict'; var arguments = 10; }",
    "function hello() {'use strict'; try { } catch (eval) { } }",
    "function hello() {'use strict'; try { } catch (arguments) { } }",
    "function hello() {'use strict'; eval = 10; }",
    "function hello() {'use strict'; arguments = 10; }",
    "function hello() {'use strict'; ++eval; }",
    "function hello() {'use strict'; --eval; }",
    "function hello() {'use strict'; ++arguments; }",
    "function hello() {'use strict'; --arguments; }",
    "function hello() {'use strict'; eval++; }",
    "function hello() {'use strict'; eval--; }",
    "function hello() {'use strict'; arguments++; }",
    "function hello() {'use strict'; arguments--; }",
    "function hello() {'use strict'; function eval() { } }",
    "function hello() {'use strict'; function arguments() { } }",
    "function eval() {'use strict'; }",
    "function arguments() {'use strict'; }",
    "function hello() {'use strict'; (function eval() { }()) }",
    "function hello() {'use strict'; (function arguments() { }()) }",
    "(function eval() {'use strict'; })()",
    "(function arguments() {'use strict'; })()",
    "function hello() {'use strict'; ({ s: function eval() { } }); }",
    "(function package() {'use strict'; })()",
    "function hello() {'use strict'; ({ i: 10, set s(eval) { } }); }",
    "function hello() {'use strict'; ({ set s(eval) { } }); }",
    "function hello() {'use strict'; ({ s: function s(eval) { } }); }",
    "function hello(eval) {'use strict';}",
    "function hello(arguments) {'use strict';}",
    "function hello() { 'use strict'; function inner(eval) {} }",
    "function hello() { 'use strict'; function inner(arguments) {} }",
    " \"\\1\"; 'use strict';",
    "function hello() { 'use strict'; \"\\1\"; }",
    "function hello() { 'use strict'; 021; }",
    "function hello() { 'use strict'; ({ \"\\1\": 42 }); }",
    "function hello() { 'use strict'; ({ 021: 42 }); }",
    "function hello() { \"octal directive\\1\"; \"use strict\"; }",
    "function hello() { \"octal directive\\1\"; \"octal directive\\2\"; \"use strict\"; }",
    "function hello() { \"use strict\"; function inner() { \"octal directive\\1\"; } }",
    "function hello() { \"use strict\"; var implements; }",
    "function hello() { \"use strict\"; var interface; }",
    "function hello() { \"use strict\"; var package; }",
    "function hello() { \"use strict\"; var private; }",
    "function hello() { \"use strict\"; var protected; }",
    "function hello() { \"use strict\"; var public; }",
    "function hello() { \"use strict\"; var static; }",
    "function hello() { \"use strict\"; var yield; }",
    "function hello() { \"use strict\"; var let; }",
    "function hello(static) { \"use strict\"; }",
    "function static() { \"use strict\"; }",
    "function eval(a) { \"use strict\"; }",
    "function arguments(a) { \"use strict\"; }",
    "var yield",
    "var let",
    "\"use strict\"; function static() { }",
    "function a(t, t) { \"use strict\"; }",
    "function a(eval) { \"use strict\"; }",
    "function a(package) { \"use strict\"; }",
    "function a() { \"use strict\"; function b(t, t) { }; }",
    "(function a(t, t) { \"use strict\"; })",
    "function a() { \"use strict\"; (function b(t, t) { }); }",
    "(function a(eval) { \"use strict\"; })",
    "(function a(package) { \"use strict\"; })",
    "__proto__: __proto__: 42;",
    "\"use strict\"; function t(__proto__, __proto__) { }",
    "\"use strict\"; x = { __proto__: 42, __proto__: 43 }",
    "\"use strict\"; x = { get __proto__() { }, __proto__: 43 }",
    "var",
    "let",
    "const",
    "{ ;  ;  ",
    "function t() { ;  ;  ",
    "parse()",
    "parse(null)",
    "parse(42)",
    "parse(true)",
    "parse(undefined)",
    "parse(new String(\"test\"))",
    "parse(new Number(42))",
    "parse(new Boolean(true))",
    "Syntax",
    "return",
    "(function () { 'use strict'; with (i); }())",
    "(function () { 'use strict'; 021 }())",
    "\"use strict\"; delete x",
    "\"use strict\"; try {} catch (eval) {}",
    "\"use strict\"; try {} catch (arguments) {}",
    "\"use strict\"; var eval;",
    "\"use strict\"; var arguments;",
    "\"use strict\"; eval = 0;",
    "\"use strict\"; eval++;",
    "\"use strict\"; --eval;",
    "\"use strict\"; arguments = 0;",
    "\"use strict\"; arguments--;",
    "\"use strict\"; ++arguments;",
    "\"use strict\";x={y:1,y:1}",
    "\"use strict\"; function eval() {};",
    "\"use strict\"; function arguments() {};",
    "\"use strict\"; function interface() {};",
    "\"use strict\"; (function eval() {});",
    "\"use strict\"; (function arguments() {});",
    "\"use strict\"; (function interface() {});",
    "\"use strict\"; function f(eval) {};",
    "\"use strict\"; function f(arguments) {};",
    "\"use strict\"; function f(foo,  foo) {};",
    "\"use strict\"; (function f(eval) {});",
    "\"use strict\"; (function f(arguments) {});",
    "\"use strict\"; (function f(foo,  foo) {});",
    "\"use strict\"; x = { set f(eval) {} }",
    "function hello() { \"octal directive\\1\"; \"use strict\"; }",
    "\"\\1\"; 'use strict';",
    "\"use strict\"; var x = { 014: 3}",
    "\"use strict\"; var x = { get i() {}, get i() {} }",
    "\"use strict\"; var x = { i: 42, get i() {} }",
    "\"use strict\"; var x = { set i(x) {}, i: 42 }"
    
];
